package com.zhijian.warehouse.manage.entity.vo.response;

import com.zhijian.util.BeanUtil;
import com.zhijian.warehouse.manage.enums.StockActionEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 影响库存操作记录表 回显vo
 *
 * @author auto
 * @version 1.0
 * @date 2024-10-28 10:28:44
 */
@Data
@Api(tags = "影响库存操作记录表回显vo")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class  StoreOptRecordVo implements Serializable {

    private static final long serialVersionUID = -1;


    /**
     * 主键自增id
     */
    @ApiModelProperty("主键自增id")
    private Long id;


    /**
     * 产品id
     */
    @ApiModelProperty("产品id")
    private Long productId;

    /**
     * 仓库id
     */
    @ApiModelProperty("仓库id")
    private Long warehouseId;

    /**
     * 库位id
     */
    @ApiModelProperty("库位id")
    private Long warehouseLocationId;


    /**
     * 入库/出库/盘点id
     */
    @ApiModelProperty("入库/出库/盘点id")
    private Long optId;

    /**
     * 操作类型 1=产品入库 2=产品出库 3=盘盈入库 4 =盘亏出库 5 = 调拨入库 6 = 调拨出库
     */
    @ApiModelProperty("操作类型 1=产品入库 2=产品出库 3=盘盈入库 4 =盘亏出库 5 = 调拨入库 6 = 调拨出库 ACTION_TYPE")
    private Integer optType;


    @ApiModelProperty("操作类型字符串")
    private String optTypeStr;

    @ApiModelProperty("产品状态")
    private Integer productStatus;

    /**
     * 库存变化量
     */
    @ApiModelProperty("库存变化量")
    private BigDecimal optCount;

    /**
     * 产品数量绝对值
     */
    @ApiModelProperty("产品数量绝对值")
    private BigDecimal count;

    /**
     * 操作结果 -1 减少库存 1=增加库存
     */
    @ApiModelProperty("操作结果 -1 减少库存 1=增加库存")
    private Integer type;

    /**
     * 操作来源 1=web 2=app
     */
    @ApiModelProperty("操作来源 1=web 2=app")
    private Integer optSource;

    /**
     * 单据编码
     */
    @ApiModelProperty("单据编码")
    private String voucherCode;

    /**
     * 单据时间 yyyy-MM-dd HH:mm:ss
     */
    @ApiModelProperty("单据时间（制单时间） yyyy-MM-dd HH:mm:ss")
    private String voucherTime;

    /**
     * 操作人id
     */
    @ApiModelProperty("操作人id")
    private Long optUserId;

    /**
     * 制单人id
     */
    @ApiModelProperty("制单人id")
    private Long crtUserId;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间（审核时间）")
    private String createTime;

    /**
     * 仓库
     */
    @ApiModelProperty("仓库")
    private String warehouseName;
    /**
     * 商品名称
     */
    @ApiModelProperty("商品名称")
    private String productName;

    /**
     * 商品编号
     */
    @ApiModelProperty("商品编号")
    private String productNumber;
    /**
     * 商品型号
     */
    @ApiModelProperty("商品型号")
    private String productModel;
    /**
     * 仓库
     */
    @ApiModelProperty("商品RFID")
    private String productRfId;
    @ApiModelProperty("品类")
    private String categoryName;
    @ApiModelProperty("单位")
    private String unitName;
    @ApiModelProperty("审核人")
    private String optUserName;
    @ApiModelProperty("操作人")
    private String crtUserName;
    @ApiModelProperty("入库数量")
    private String inCount;
    @ApiModelProperty("出库数量")
    private String outCount;
    @ApiModelProperty("库位")
    private String warehouseLocationName;
    private String outTime;
    private String purpose;
    private Integer unitFraction;
    private String drawUserName;

    public String getOptTypeStr() {
        if (BeanUtil.isNotEmpty(this.optType)) {
            StockActionEnum.ACTION_TYPE byValue = StockActionEnum.ACTION_TYPE.getByValue(this.optType);
            if (BeanUtil.isNotEmpty(byValue))
                return byValue.msg;
        }
        return optTypeStr;
    }

    public String getInCount() {
        if (BeanUtil.isNotEmpty(this.type) && this.type == 1)
            return initData(this.count).toString();
        return BigDecimal.ZERO.toString();
    }

    public String getOutCount() {
        if (BeanUtil.isNotEmpty(this.type) && this.type == -1)
            return initData(this.count).toString();
        return BigDecimal.ZERO.toString();
    }

    //初始化 数据 如果不是空的则补全小数位
    public BigDecimal initData(BigDecimal data) {
        if (data == null) {
            return BigDecimal.ZERO;
        }
        if (BeanUtil.isEmpty(this.unitFraction))
            return data;
        return data.setScale(this.unitFraction, RoundingMode.HALF_UP);
    }
}
